#ifndef OPENGL_MINGW_GL_CAMERA_H
#define OPENGL_MINGW_GL_CAMERA_H
#include "cglm.h"
#include "GLFW/glfw3.h"
#include <stdio.h>
#include <stdlib.h>
typedef struct camera {
    vec3 cameraPos; //摄像机位置
    vec3 cameraFront;//摄像机方向
    vec3 cameraUp;//摄像机上向量
    float cameraSpeed;//摄像机移动速度
    //摄像机的俯仰角和偏航角的改变会改变摄像机的方向
    float pitch; //摄像机俯仰角（上下）与xz平面的夹角
    float yaw; //摄像机偏航角（与z轴负方向夹角）
    //鼠标是否是第一次移到屏幕中，默认是
    int firstMouse;
    //记录鼠标上一次的位置
    float lastX;
    float lastY;

    float fovy;//视野
}Camera;

/**
 * 初始化一个相机
 * @return
 */
Camera * initCamera();

/**
 * 按键移动摄像机位置
 * @param window glfw窗口
 */
void pressKeyMove(Camera *camera,GLFWwindow *window);

/**
 * 移动鼠标改变摄像机方向
 * @param window glfw窗口
 * @param x 光标位置 x
 * @param y 光标位置 y
 */
void mouseDirection(Camera *camera,GLFWwindow *window, double x, double y);


/**
 * 滚动鼠标滚轮 改变视角
 * @param camera
 * @param window
 * @param x_offset
 * @param y_offset
 */
void scrollFov(Camera *camera,  GLFWwindow *window, double x_offset, double y_offset);

/**
 * 释放资源
 * @param camera
 */
void freeCamera(Camera* camera);
#endif